package handler_sys

import (
	_ "go_web/internal/model"
	"go_web/internal/model/model_sys"
	"go_web/internal/req/req_sys"
	"go_web/internal/service/service_sys"
	"go_web/pkg/req"
	"go_web/pkg/res"
	"net/http"
	"strconv"

	"github.com/gin-gonic/gin"
)

type SysDictTypeHandler struct {
	SysDictTypeService *service_sys.SysDictTypeService
}

func NewSysDictTypeHandler(SysDictTypeService *service_sys.SysDictTypeService) *SysDictTypeHandler {
	return &SysDictTypeHandler{ SysDictTypeService }
}

// Detail 查询SysDictType详情
// @Summary 查询SysDictType详情
// @Tags SysDictTypeHandler
// @Accept json
// @Produce json
// @Param id query string true "主键ID"
// @Success 200 {object} res.R[model_sys.SysDictType] "SysDictType"
// @Router /sys_dict_type/detail [get]
func (h *SysDictTypeHandler) Detail(ctx *gin.Context) {
	id := ctx.Query("id")
	id64, err := strconv.ParseInt(id, 10, 64)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": "无效的ID"})
		return
	}
	SysDictType, err := h.SysDictTypeService.Detail(ctx, id64)
	if err != nil {
		ctx.JSON(http.StatusOK, res.NewR[string]().Fail("查询不到"))
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[model_sys.SysDictType]().Ok(*SysDictType))
}

// Page 分页查询SysDictType
// @Summary 分页查询SysDictType
// @Tags SysDictTypeHandler
// @Accept json
// @Produce json
// @Param queryParams query req_sys.SysDictTypePageReq false "分页请求参数"
// @Success 200 {object} res.R[res.PageRes]
// @Router /sys_dict_type/page [get]
func (h *SysDictTypeHandler) Page(ctx *gin.Context) {
	var pageReq req_sys.SysDictTypePageReq
	if err := ctx.ShouldBindQuery(&pageReq); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	page, err := h.SysDictTypeService.Page(ctx, pageReq)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}

	ctx.JSON(http.StatusOK, res.NewR[res.PageRes]().Ok(*page))
}

// Add 创建SysDictType
// @Summary 创建SysDictType
// @Tags SysDictTypeHandler
// @Accept json
// @Produce json
// @Param jsonParams body req_sys.SysDictTypeAddReq true "SysDictType"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_dict_type/add [post]
func (h *SysDictTypeHandler) Add(ctx *gin.Context) {
	var reqSys req_sys.SysDictTypeAddReq
	if err := ctx.ShouldBindJSON(&reqSys); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	id, err := h.SysDictTypeService.Add(ctx, reqSys)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(id))
}

// Edit 修改SysDictType
// @Summary 修改SysDictType
// @Tags SysDictTypeHandler
// @Accept json
// @Produce json
// @Param jsonParams body req_sys.SysDictTypeEditReq true "SysDictType"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_dict_type/edit [post]
func (h *SysDictTypeHandler) Edit(ctx *gin.Context) {
	var reqSys req_sys.SysDictTypeEditReq
	if err := ctx.ShouldBindJSON(&reqSys); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	n, err := h.SysDictTypeService.Edit(ctx, reqSys)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(n))
}

// Delete 删除SysDictType
// @Summary 删除SysDictType
// @Tags SysDictTypeHandler
// @Accept json
// @Produce json
// @Param jsonParams body req.IdsReq true "ID集合"
// @Success 200 {object} res.R[int64] "操作结果"
// @Router /sys_dict_type/delete [post]
func (h *SysDictTypeHandler) Delete(ctx *gin.Context) {
	var idsReq req.IdsReq
	if err := ctx.ShouldBindJSON(&idsReq); err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	n, err := h.SysDictTypeService.Delete(ctx, idsReq)
	if err != nil {
		ctx.JSON(http.StatusBadRequest, gin.H{"error": err.Error()})
		return
	}
	ctx.JSON(http.StatusOK, res.NewR[int64]().Ok(n))
}
